package com.jeomo.common.core.dto;

import java.beans.Transient;

/**
 * <h3>jeomo</h3>
 * <p>树的基类，可以使用TreeUtil来构建树</p>
 *
 * @author : qibotian
 * @date : 2020-09-28 10:46
 **/
public interface ITree {


    /**
     * 获取父类节点字段名字
     * 默认 parentCode
     * @return
     */
    @Transient
    default String getParentFieldName() {
        return "parentCode";
    }

    /**
     * 获取父类节点字段名字
     * 默认 children
     * @return
     */
    @Transient
    default String getChildrenFieldName() {
        return "children";
    }

    /**
     * 获取节点的唯一标识码
     * 默认为 code
     * @return
     */
    @Transient
    default String getCodeFieldName() {
        return "code";
    }

    @Transient
    default String getNameFieldName() {
        return "name";
    }

    /**
     * 返回默认分组代码
     * 如果你不需要设置默认分组，则不需要实现这个方法
     * @return
     */
    @Transient
    default String getDefaultGroupCode() {return "";};

    /**
     * 返回默认分组名称
     * 如果你不需要设置默认分组，则不需要实现这个方法
     * @return
     */
    @Transient
    default String getDefaultGroupName() {return "默认分组";};


    /**
     * 判断是否为分组
     * 如果你不需要设置默认分组，则不需要实现这个方法
     * @return
     */
    @Transient
    default boolean isGroup() {return false;};

    /**
     * 如果你需要设置默认分组，则这个字段返回能标识默认分组为分组的类型值，
     * 如果你不需要设置默认分组，则不需要实现这个方法
     * @return
     */
    @Transient
    default Object getGroupTypeValue() {return null; };

    /**
     * 返回分组字段类型，
     * 如果你需要设置默认分组，则返回标识是否为分组或者节点类型的字段名
     * 如果你不需要设置默认分组，则不需要实现这个方法
     * @return
     */
    @Transient
    default String getGroupTypeFieldName() {return "type"; };

}
